#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
  // printf("hello\n"); 
 // for(int i=0;i<150;++i)
 // {
 //   printf("%d: %s\n", i, strerror(i));
 // }
  //int *p = NULL;
  //*p = 123;
  //printf("you can see me");
  //sleep(3);
  //exit(123); 
  ////_exit(123); 
  int pid = fork();
  if(pid < 0)
  {
    perror("fork:");
    exit(-1);
  }
  else if(pid == 0)
  {
    //子进程
    int cnt=5;
   // while(cnt--)
    while(1)
    {
      printf("child cnt:%d, pid:%d, ppid:%d\n", cnt, getpid(), getppid());
      sleep(1);
    }
    exit(66);
  }
  else 
  {
    printf("father, pid:%d, ppid:%d\n", getpid(), getppid());
    int status = 0;
    int ret = wait(&status);
    if(ret > 0 && (status & (0x7f))==0)  // 正常退出
    {
      printf("正常退出,ret:%d, child exit code:%d\n",ret, (status>>8)&0xff);   // 阻塞式的等待
    } 
    else if(ret>0)
    {
      printf("异常退出，sig code:%d\n",status&0x7f);
    }
    // 基本没有意义，只是为了对比演示
    while(1)
    {
      printf("father, pid:%d, ppid:%d\n", getpid(), getppid());
      sleep(1);
    }
  }
  return 0;
}
